/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * TepelneZtratyFrame.java
 *
 * Created on 14.6.2012, 7:36:36
 */
package cz.worsik.vypocty.topeni.tepelneztraty.view;

import cz.worsik.utils.DoubleFormat;
import cz.worsik.vypocty.topeni.tepelneztraty.model.Mistnost;
import cz.worsik.vypocty.topeni.tepelneztraty.model.Objekt;
import cz.worsik.vypocty.topeni.tepelneztraty.view.mistnosti.MistnostTabPane;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author 231260
 */
public class TepelneZtratyFrame extends javax.swing.JFrame implements ActionListener {
	
	private static final Logger log = LoggerFactory.getLogger(VlastnostiObjektuDialog.class);
	
	private VlastnostiObjektuDialog vlastnostiObjektuDialog;
	public VlastnostiMistnostiDialog vlastnostiMistnostiDialog;
	private TepelneZtratyAboutDialog aboutDialog;
	
	private List<Mistnost> mistnostiList;
	// actionCommand pro listener
	private final String MENU_PREPNOUT_MISTNOST = "menuPrepnoutMistnostAction";

	/** Creates new form TepelneZtratyFrame */
	public TepelneZtratyFrame() {
		mistnostiList = new ArrayList<Mistnost>();
	}
	
	/**
	 * Inicializace objektu, nahrada konstruktoru
	 */
	public void createFrame() {
		vlastnostiObjektuDialog.createDialog(new Objekt());
		vlastnostiObjektuDialog.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosed(WindowEvent we) {
				ukazInfoPanel();
				aktualizujTabView();
			}
		});
		vlastnostiMistnostiDialog.createDialog();
		vlastnostiMistnostiDialog.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosed(WindowEvent we) {
				aktualizujTabView();
				aktualizujMenu();
			}
		});
		initComponents();
		
		mistnostiTabPanel.addChangeListener(new ZmenaMistnostiTabListener(vlastnostiMistnostiDialog));
		
		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension screenSize = tk.getScreenSize();
		int x = (screenSize.width-this.getWidth())/2;
		int y = (screenSize.height-this.getHeight())/2;
		setLocation(x,y);
		setVisible(true);
		nactiObjekt();
	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	@SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelObjektInfo = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        labelObjektNazev = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        labelObjektTeplotaVnejsi = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        labelObjektCharCislo = new javax.swing.JLabel();
        mistnostiTabPanel = new javax.swing.JTabbedPane();
        panelObjektVypocteneHodnoty = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        labelObjektPocetMistnosti = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        labelObjektCelkovaZtrata = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        menuBar = new javax.swing.JMenuBar();
        javax.swing.JMenu fileMenu = new javax.swing.JMenu();
        javax.swing.JMenuItem menuProramUkoncit = new javax.swing.JMenuItem();
        menuObjekt = new javax.swing.JMenu();
        menuObjektNovy = new javax.swing.JMenuItem();
        menuObjektUpravit = new javax.swing.JMenuItem();
        menuObjektExport = new javax.swing.JMenuItem();
        menuObjektNacti = new javax.swing.JMenuItem();
        menuObjektUloz = new javax.swing.JMenuItem();
        menuObjektTisk = new javax.swing.JMenuItem();
        menuMistnost = new javax.swing.JMenu();
        menuMistnostNova = new javax.swing.JMenuItem();
        menuMistnostUpravit = new javax.swing.JMenuItem();
        menuMistnostOdstranit = new javax.swing.JMenuItem();
        menuMistnostPrepnoutNa = new javax.swing.JMenu();
        menuStena = new javax.swing.JMenu();
        menuStenaNova = new javax.swing.JMenuItem();
        menuStenaUpravit = new javax.swing.JMenuItem();
        menuStenaDvere = new javax.swing.JMenuItem();
        menuStenaOkno = new javax.swing.JMenuItem();
        menuStenaOdstranit = new javax.swing.JMenuItem();
        menuNastaveni = new javax.swing.JMenu();
        menuNastaveniPreference = new javax.swing.JMenuItem();
        jSeparator2 = new javax.swing.JPopupMenu.Separator();
        menuNastaveniVzorce = new javax.swing.JMenuItem();
        menuNastaveniKoeficienty = new javax.swing.JMenuItem();
        menuNastaveniSvetoveStrany = new javax.swing.JMenuItem();
        javax.swing.JMenu helpMenu = new javax.swing.JMenu();
        javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);
        addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                formKeyPressed(evt);
            }
        });
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        panelObjektInfo.setBackground(new java.awt.Color(200, 200, 200));
        panelObjektInfo.setAlignmentX(0.0F);
        panelObjektInfo.setAlignmentY(0.0F);
        panelObjektInfo.setFocusable(false);
        panelObjektInfo.setMaximumSize(new java.awt.Dimension(800, 24));
        panelObjektInfo.setMinimumSize(new java.awt.Dimension(800, 24));
        panelObjektInfo.setPreferredSize(new java.awt.Dimension(820, 24));

        jLabel1.setText("Objekt:");
        jLabel1.setAlignmentX(0.5F);

        labelObjektNazev.setFont(new java.awt.Font("Tahoma", 1, 11));
        labelObjektNazev.setText("NazevObjektu");
        labelObjektNazev.setAlignmentX(0.5F);

        jLabel3.setText("Venkovní teplota:");
        jLabel3.setAlignmentX(0.5F);

        labelObjektTeplotaVnejsi.setFont(new java.awt.Font("Tahoma", 1, 11));
        labelObjektTeplotaVnejsi.setText("-15");
        labelObjektTeplotaVnejsi.setAlignmentX(0.5F);

        jLabel9.setText("°C");
        jLabel9.setAlignmentX(0.5F);

        jLabel5.setText("Charakteristické č. budovy: ");
        jLabel5.setAlignmentX(0.5F);

        labelObjektCharCislo.setFont(new java.awt.Font("Tahoma", 1, 11));
        labelObjektCharCislo.setText("8");
        labelObjektCharCislo.setAlignmentX(0.5F);

        org.jdesktop.layout.GroupLayout panelObjektInfoLayout = new org.jdesktop.layout.GroupLayout(panelObjektInfo);
        panelObjektInfo.setLayout(panelObjektInfoLayout);
        panelObjektInfoLayout.setHorizontalGroup(
            panelObjektInfoLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelObjektInfoLayout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel1)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(labelObjektNazev)
                .add(18, 18, 18)
                .add(jLabel3)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(labelObjektTeplotaVnejsi)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jLabel9)
                .add(18, 18, 18)
                .add(jLabel5)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(labelObjektCharCislo)
                .addContainerGap(346, Short.MAX_VALUE))
        );
        panelObjektInfoLayout.setVerticalGroup(
            panelObjektInfoLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelObjektInfoLayout.createSequentialGroup()
                .add(panelObjektInfoLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.CENTER)
                    .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 24, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(labelObjektNazev)
                    .add(jLabel3)
                    .add(jLabel9)
                    .add(labelObjektTeplotaVnejsi)
                    .add(jLabel5)
                    .add(labelObjektCharCislo))
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        getContentPane().add(panelObjektInfo, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 800, -1));

        mistnostiTabPanel.setPreferredSize(new java.awt.Dimension(800, 520));
        getContentPane().add(mistnostiTabPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 30, -1, -1));

        panelObjektVypocteneHodnoty.setBackground(new java.awt.Color(200, 200, 200));

        jLabel2.setText("Počet místností:");
        jLabel2.setPreferredSize(new java.awt.Dimension(100, 30));

        labelObjektPocetMistnosti.setFont(new java.awt.Font("Tahoma", 1, 11));
        labelObjektPocetMistnosti.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        labelObjektPocetMistnosti.setText(""+mistnostiList.size());
        labelObjektPocetMistnosti.setPreferredSize(new java.awt.Dimension(20, 30));

        jLabel7.setText("Celková tepelná ztráta:");
        jLabel7.setAlignmentX(0.5F);

        labelObjektCelkovaZtrata.setFont(new java.awt.Font("Tahoma", 1, 11));
        labelObjektCelkovaZtrata.setText("0");
        labelObjektCelkovaZtrata.setAlignmentX(0.5F);

        jLabel10.setText("W");
        jLabel10.setAlignmentX(0.5F);
        jLabel10.setPreferredSize(new java.awt.Dimension(15, 30));

        org.jdesktop.layout.GroupLayout panelObjektVypocteneHodnotyLayout = new org.jdesktop.layout.GroupLayout(panelObjektVypocteneHodnoty);
        panelObjektVypocteneHodnoty.setLayout(panelObjektVypocteneHodnotyLayout);
        panelObjektVypocteneHodnotyLayout.setHorizontalGroup(
            panelObjektVypocteneHodnotyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelObjektVypocteneHodnotyLayout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(labelObjektPocetMistnosti, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(18, 18, 18)
                .add(jLabel7)
                .add(18, 18, 18)
                .add(labelObjektCelkovaZtrata, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .add(18, 18, 18)
                .add(jLabel10, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(500, 500, 500))
        );
        panelObjektVypocteneHodnotyLayout.setVerticalGroup(
            panelObjektVypocteneHodnotyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, panelObjektVypocteneHodnotyLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                .add(jLabel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .add(labelObjektPocetMistnosti, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(jLabel7, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(labelObjektCelkovaZtrata, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)
                .add(jLabel10, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
        );

        getContentPane().add(panelObjektVypocteneHodnoty, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 550, 800, 30));

        menuBar.setMaximumSize(new java.awt.Dimension(800, 25));
        menuBar.setMinimumSize(new java.awt.Dimension(800, 25));

        fileMenu.setMnemonic('P');
        fileMenu.setText("Program");

        menuProramUkoncit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, java.awt.event.InputEvent.CTRL_MASK));
        menuProramUkoncit.setText("Konec");
        menuProramUkoncit.setToolTipText("Ukončit aplikaci");
        menuProramUkoncit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuProramUkoncitActionPerformed(evt);
            }
        });
        fileMenu.add(menuProramUkoncit);

        menuBar.add(fileMenu);

        menuObjekt.setMnemonic('O');
        menuObjekt.setText("Objekt");

        menuObjektNovy.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_B, java.awt.event.InputEvent.CTRL_MASK));
        menuObjektNovy.setText("Nový");
        menuObjektNovy.setToolTipText("Vytvořit nový objekt (Aktuální bude uzavřen)");
        menuObjektNovy.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuObjektNovyActionPerformed(evt);
            }
        });
        menuObjekt.add(menuObjektNovy);

        menuObjektUpravit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_U, java.awt.event.InputEvent.CTRL_MASK));
        menuObjektUpravit.setText("Upravit hodnoty");
        menuObjektUpravit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuObjektUpravitActionPerformed(evt);
            }
        });
        menuObjekt.add(menuObjektUpravit);

        menuObjektExport.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK));
        menuObjektExport.setMnemonic('E');
        menuObjektExport.setText("Export");
        menuObjekt.add(menuObjektExport);

        menuObjektNacti.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
        menuObjektNacti.setText("Načti z DB");
        menuObjekt.add(menuObjektNacti);

        menuObjektUloz.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
        menuObjektUloz.setText("Ulož do DB");
        menuObjekt.add(menuObjektUloz);

        menuObjektTisk.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK));
        menuObjektTisk.setMnemonic('T');
        menuObjektTisk.setText("Tisk");
        menuObjekt.add(menuObjektTisk);

        menuBar.add(menuObjekt);

        menuMistnost.setMnemonic('M');
        menuMistnost.setText("Místnost");

        menuMistnostNova.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
        menuMistnostNova.setMnemonic('N');
        menuMistnostNova.setText("Nová");
        menuMistnostNova.setToolTipText("Vytvořit novou místnost v objektu");
        menuMistnostNova.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuMistnostNovaActionPerformed(evt);
            }
        });
        menuMistnost.add(menuMistnostNova);

        menuMistnostUpravit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
        menuMistnostUpravit.setMnemonic('U');
        menuMistnostUpravit.setText("Upravit");
        menuMistnostUpravit.setEnabled(!mistnostiList.isEmpty());
        menuMistnostUpravit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuMistnostUpravitActionPerformed(evt);
            }
        });
        menuMistnost.add(menuMistnostUpravit);

        menuMistnostOdstranit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
        menuMistnostOdstranit.setMnemonic('O');
        menuMistnostOdstranit.setText("Odstranit");
        menuMistnostOdstranit.setEnabled(!mistnostiList.isEmpty());
        menuMistnostOdstranit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuMistnostOdstranitActionPerformed(evt);
            }
        });
        menuMistnost.add(menuMistnostOdstranit);

        menuMistnostPrepnoutNa.setText("Přepnout na");
        menuMistnostPrepnoutNa.setEnabled(!mistnostiList.isEmpty());
        menuMistnost.add(menuMistnostPrepnoutNa);

        menuBar.add(menuMistnost);

        menuStena.setMnemonic('S');
        menuStena.setText("Stěna");
        menuStena.setEnabled(!mistnostiList.isEmpty());

        menuStenaNova.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));
        menuStenaNova.setMnemonic('N');
        menuStenaNova.setText("Nová");
        menuStenaNova.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuStenaNovaActionPerformed(evt);
            }
        });
        menuStena.add(menuStenaNova);

        menuStenaUpravit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E, java.awt.event.InputEvent.CTRL_MASK));
        menuStenaUpravit.setMnemonic('U');
        menuStenaUpravit.setText("Upravit");
        menuStena.add(menuStenaUpravit);

        menuStenaDvere.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_D, java.awt.event.InputEvent.CTRL_MASK));
        menuStenaDvere.setText("Vložit dveře");
        menuStenaDvere.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuStenaDvereActionPerformed(evt);
            }
        });
        menuStena.add(menuStenaDvere);

        menuStenaOkno.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK));
        menuStenaOkno.setText("Vložit okno");
        menuStenaOkno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuStenaOknoActionPerformed(evt);
            }
        });
        menuStena.add(menuStenaOkno);

        menuStenaOdstranit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE, java.awt.event.InputEvent.CTRL_MASK));
        menuStenaOdstranit.setMnemonic('O');
        menuStenaOdstranit.setText("Odstranit");
        menuStenaOdstranit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuStenaOdstranitActionPerformed(evt);
            }
        });
        menuStena.add(menuStenaOdstranit);

        menuBar.add(menuStena);

        menuNastaveni.setMnemonic('N');
        menuNastaveni.setText("Nastavení");

        menuNastaveniPreference.setMnemonic('P');
        menuNastaveniPreference.setText("Preference programu");
        menuNastaveni.add(menuNastaveniPreference);
        menuNastaveni.add(jSeparator2);

        menuNastaveniVzorce.setMnemonic('V');
        menuNastaveniVzorce.setText("Vzorce");
        menuNastaveni.add(menuNastaveniVzorce);

        menuNastaveniKoeficienty.setMnemonic('K');
        menuNastaveniKoeficienty.setText("Koeficienty");
        menuNastaveni.add(menuNastaveniKoeficienty);

        menuNastaveniSvetoveStrany.setMnemonic('S');
        menuNastaveniSvetoveStrany.setText("Světové strany");
        menuNastaveni.add(menuNastaveniSvetoveStrany);

        menuBar.add(menuNastaveni);

        helpMenu.setText("Nápověda");

        aboutMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0));
        aboutMenuItem.setText("O aplikaci...");
        aboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                aboutMenuItemActionPerformed(evt);
            }
        });
        helpMenu.add(aboutMenuItem);

        menuBar.add(helpMenu);

        setJMenuBar(menuBar);

        pack();
    }// </editor-fold>//GEN-END:initComponents

	private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutMenuItemActionPerformed
		ukazAboutDialog();
	}//GEN-LAST:event_aboutMenuItemActionPerformed

	private void menuProramUkoncitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuProramUkoncitActionPerformed
		quit();
	}//GEN-LAST:event_menuProramUkoncitActionPerformed

	private void menuObjektNovyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuObjektNovyActionPerformed
		novyObjekt();
	}//GEN-LAST:event_menuObjektNovyActionPerformed

	private void menuObjektUpravitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuObjektUpravitActionPerformed
		ukazDialogObjektu();
	}//GEN-LAST:event_menuObjektUpravitActionPerformed

	private void menuMistnostNovaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuMistnostNovaActionPerformed
		novaMistnost();
	}//GEN-LAST:event_menuMistnostNovaActionPerformed

	private void menuMistnostUpravitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuMistnostUpravitActionPerformed
		if (!menuMistnostUpravit.isEnabled())
			return;
		if (mistnostiList.isEmpty())
			return;
		MistnostTabPane tab = (MistnostTabPane) mistnostiTabPanel.getSelectedComponent();
		vlastnostiMistnostiDialog.setMistnost(tab.getMistnost());
		ukazDialogMistnosti();
	}//GEN-LAST:event_menuMistnostUpravitActionPerformed

	private void formKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_formKeyPressed
		// posouvani se mezi Taby mistnosti - Ctrl+Tab
		switch (evt.getKeyCode())
		{
			case KeyEvent.VK_TAB:
				if (evt.isControlDown())
					mistnostiTabPanel.setSelectedIndex(0);
				break;
		}
	}//GEN-LAST:event_formKeyPressed

	private void menuMistnostOdstranitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuMistnostOdstranitActionPerformed
		Mistnost mistnost = vlastnostiMistnostiDialog.getMistnost();
		for (int i = 0; i<mistnostiList.size(); i++)
		{
			if (mistnost == mistnostiList.get(i))
			{
				mistnostiTabPanel.remove(i);
				mistnostiList.remove(i);
			}
		}
		aktualizujMenu();
		aktualizujTabView();
	}//GEN-LAST:event_menuMistnostOdstranitActionPerformed

	private void menuStenaNovaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuStenaNovaActionPerformed
		novaStena();
	}//GEN-LAST:event_menuStenaNovaActionPerformed

	private void menuStenaOdstranitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuStenaOdstranitActionPerformed
		odstranStenu();
	}//GEN-LAST:event_menuStenaOdstranitActionPerformed

	private void menuStenaOknoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuStenaOknoActionPerformed
		noveOknoVeStene();
	}//GEN-LAST:event_menuStenaOknoActionPerformed

	private void menuStenaDvereActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuStenaDvereActionPerformed
		noveDvereVeStene();
	}//GEN-LAST:event_menuStenaDvereActionPerformed
	
	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
		/* Set the Nimbus look and feel */
		//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
		 * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
		 */
		try {
			for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
				if ("Nimbus".equals(info.getName())) {
					javax.swing.UIManager.setLookAndFeel(info.getClassName());
					break;
				}
			}
		} catch (ClassNotFoundException ex) {
			java.util.logging.Logger.getLogger(TepelneZtratyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		} catch (InstantiationException ex) {
			java.util.logging.Logger.getLogger(TepelneZtratyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		} catch (IllegalAccessException ex) {
			java.util.logging.Logger.getLogger(TepelneZtratyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		} catch (javax.swing.UnsupportedLookAndFeelException ex) {
			java.util.logging.Logger.getLogger(TepelneZtratyFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		}
		//</editor-fold>
	}

	public void setAboutDialog(TepelneZtratyAboutDialog aboutDialog) {
		this.aboutDialog = aboutDialog;
	}

	public void setVlastnostiObjektuDialog(VlastnostiObjektuDialog vlastnostiObjektuDialog) {
		this.vlastnostiObjektuDialog = vlastnostiObjektuDialog;
	}

	public void setVlastnostiMistnostiDialog(VlastnostiMistnostiDialog vlastnostiMistnostiDialog) {
		this.vlastnostiMistnostiDialog = vlastnostiMistnostiDialog;
	}
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPopupMenu.Separator jSeparator2;
    private javax.swing.JLabel labelObjektCelkovaZtrata;
    private javax.swing.JLabel labelObjektCharCislo;
    private javax.swing.JLabel labelObjektNazev;
    private javax.swing.JLabel labelObjektPocetMistnosti;
    private javax.swing.JLabel labelObjektTeplotaVnejsi;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JMenu menuMistnost;
    private javax.swing.JMenuItem menuMistnostNova;
    private javax.swing.JMenuItem menuMistnostOdstranit;
    private javax.swing.JMenu menuMistnostPrepnoutNa;
    private javax.swing.JMenuItem menuMistnostUpravit;
    private javax.swing.JMenu menuNastaveni;
    private javax.swing.JMenuItem menuNastaveniKoeficienty;
    private javax.swing.JMenuItem menuNastaveniPreference;
    private javax.swing.JMenuItem menuNastaveniSvetoveStrany;
    private javax.swing.JMenuItem menuNastaveniVzorce;
    private javax.swing.JMenu menuObjekt;
    private javax.swing.JMenuItem menuObjektExport;
    private javax.swing.JMenuItem menuObjektNacti;
    private javax.swing.JMenuItem menuObjektNovy;
    private javax.swing.JMenuItem menuObjektTisk;
    private javax.swing.JMenuItem menuObjektUloz;
    private javax.swing.JMenuItem menuObjektUpravit;
    private javax.swing.JMenu menuStena;
    private javax.swing.JMenuItem menuStenaDvere;
    private javax.swing.JMenuItem menuStenaNova;
    private javax.swing.JMenuItem menuStenaOdstranit;
    private javax.swing.JMenuItem menuStenaOkno;
    private javax.swing.JMenuItem menuStenaUpravit;
    private javax.swing.JTabbedPane mistnostiTabPanel;
    private javax.swing.JPanel panelObjektInfo;
    private javax.swing.JPanel panelObjektVypocteneHodnoty;
    // End of variables declaration//GEN-END:variables
	
	public void novyObjekt() {
		mistnostiList.clear();
		smazTabView();
		Objekt objekt = new Objekt();
		vlastnostiMistnostiDialog.setMistnost(new Mistnost(objekt));
		vlastnostiObjektuDialog.setObjekt(objekt);
		
		ukazDialogObjektu();
	}
	
	public void novaMistnost()
	{
		Objekt objekt = vlastnostiObjektuDialog.getObjekt();
		Mistnost mistnost = new Mistnost(objekt);
		mistnost.addPropertyChangeListener(new PropertyChangeListener() {

			@Override
			public void propertyChange(PropertyChangeEvent pce) {
				aktualizujTabView();
			}
		});
		mistnostiList.add(mistnost);
		vlastnostiMistnostiDialog.setMistnost(mistnost);
		
		ukazDialogMistnosti();
	}
	
	public void novaStena()
	{
		MistnostTabPane tab = (MistnostTabPane) mistnostiTabPanel.getSelectedComponent();
		tab.addStena();
		tab.setLastStenaSelected();
		aktualizujMenu();
	}
	
	public void odstranStenu()
	{
		MistnostTabPane tab = (MistnostTabPane) mistnostiTabPanel.getSelectedComponent();
		tab.removeStena();
		aktualizujMenu();
	}
	
	public void noveDvereVeStene()
	{
		MistnostTabPane tab = (MistnostTabPane) mistnostiTabPanel.getSelectedComponent();
		tab.addDvereDoVybraneSteny();
	}
	
	public void noveOknoVeStene()
	{
		MistnostTabPane tab = (MistnostTabPane) mistnostiTabPanel.getSelectedComponent();
		tab.addOknoDoVybraneSteny();
	}

	private void nactiObjekt() {
		// zjisti, zdali existuje nejaky objekt v DB a pokud ano, nacte posledni a vyplni panel informaci
		// pokud neexistuje zadny, zobrazi se dialog pro vytvoreni noveho objektu
		novyObjekt();
	}
	
	public void ukazDialogObjektu()
	{
		vlastnostiObjektuDialog.setVisible(true);
		vlastnostiObjektuDialog.toFront();
		//setEnabled(false);
	}
	
	public void ukazDialogMistnosti()
	{
		vlastnostiMistnostiDialog.setVisible(true);
		vlastnostiMistnostiDialog.toFront();
		//setEnabled(false);
	}
	
	public void skryjInfoPanel() {
		panelObjektInfo.setVisible(false);
	}
	
	public void ukazInfoPanel() {
		Objekt objekt = vlastnostiObjektuDialog.getObjekt();
		
		labelObjektNazev.setText(objekt.getNazev());
		labelObjektTeplotaVnejsi.setText(""+objekt.getTeplota_venkovni());
		labelObjektCharCislo.setText(""+objekt.getChar_cislo_budovy());
		labelObjektCelkovaZtrata.setText(DoubleFormat.trim2(objekt.getTepelna_ztrata()));
		
		panelObjektInfo.setVisible(true);
	}
	
	public void aktualizujTabView()
	{
		labelObjektPocetMistnosti.setText(""+mistnostiList.size());
		Objekt objekt = vlastnostiObjektuDialog.getObjekt();
		Double ztrata = 0d;
		while (mistnostiList.size() > mistnostiTabPanel.getTabCount())
		{
			Mistnost mistnost = mistnostiList.get(mistnostiTabPanel.getTabCount());
			
			MistnostTabPane tab = new MistnostTabPane(mistnost);
			tab.showKomponenty();
			mistnostiTabPanel.addTab(mistnost.getNazevTabu(), tab);
			mistnostiTabPanel.setSelectedComponent(tab);
		}
		for (int i = 0; i < mistnostiList.size(); i++)
		{
			mistnostiTabPanel.setTitleAt(i, mistnostiList.get(i).getNazevTabu());
			MistnostTabPane tab = (MistnostTabPane) mistnostiTabPanel.getComponent(i);
			
			tab.refreshTable();
			tab.nastavHodnoty();
			
			ztrata += mistnostiList.get(i).getTepelna_ztrata();
		}
		objekt.setTepelna_ztrata(ztrata);
		ukazInfoPanel();
	}
	
	public void aktualizujMenu()
	{
		// mistnost
		menuMistnostUpravit.setEnabled(!mistnostiList.isEmpty());
		menuMistnostOdstranit.setEnabled(!mistnostiList.isEmpty());
		menuMistnostPrepnoutNa.setEnabled(!mistnostiList.isEmpty());
		menuMistnostPrepnoutNa.removeAll();
		for (int i = 0; i < mistnostiList.size(); i++)
		{
			String nazev = mistnostiList.get(i).getNazevTabu();
			JMenuItem item = new JMenuItem(nazev);
			item.setActionCommand(MENU_PREPNOUT_MISTNOST);
			item.setName(nazev);
			item.addActionListener(this);
			menuMistnostPrepnoutNa.add(item);
		}
		// stena
		menuStena.setEnabled(!mistnostiList.isEmpty() && vlastnostiMistnostiDialog.getMistnost() != null);
		// otvor
		MistnostTabPane tab = (MistnostTabPane) mistnostiTabPanel.getSelectedComponent();
		menuStenaDvere.setEnabled(!mistnostiList.isEmpty() && vlastnostiMistnostiDialog.getMistnost() != null && !tab.getMistnost().getStenyList().isEmpty() && tab.isSelectedStena());
		menuStenaOkno.setEnabled(!mistnostiList.isEmpty() && vlastnostiMistnostiDialog.getMistnost() != null && !tab.getMistnost().getStenyList().isEmpty() && tab.isSelectedStena());
	}
	
	public void smazTabView()
	{
		mistnostiTabPanel.removeAll();
	}

	public void ukazAboutDialog()
	{
		aboutDialog.setVisible(true);
		aboutDialog.toFront();
	}
	
	public void quit()
	{
		System.exit(0);
	}
	
	class ZmenaMistnostiTabListener implements ChangeListener {
		
		VlastnostiMistnostiDialog dialog;

		ZmenaMistnostiTabListener(VlastnostiMistnostiDialog vlastnostiMistnostiDialog) {
			dialog = vlastnostiMistnostiDialog;
		}
			
			// This method is called whenever the selected tab changes
			@Override
			public void stateChanged(ChangeEvent evt) {
				JTabbedPane panel = (JTabbedPane)evt.getSource();
				int index = panel.getSelectedIndex();

				if (index >= 0)
				{
					MistnostTabPane tab = (MistnostTabPane) panel.getComponent(index);
					Mistnost m = tab.getMistnost();
					vlastnostiMistnostiDialog.setMistnost(m);
					panel.setSelectedComponent(tab);
				}
				
			}
	}

	@Override
	public void actionPerformed(ActionEvent ae) {

		if (ae.getActionCommand().equals(MENU_PREPNOUT_MISTNOST))
		{
			JMenuItem item = (JMenuItem) ae.getSource();
			for (int i=0; i < mistnostiList.size(); i++)
			{
				MistnostTabPane tab = (MistnostTabPane) mistnostiTabPanel.getComponent(i);
				log.debug("Prepni mistnost. Pruchod: "+i+" Karta: "+mistnostiTabPanel.getTitleAt(i)+", Menu: "+item.getName());
				if (mistnostiTabPanel.getTitleAt(i).equals(item.getName()))
				{
					log.debug("Prepinam na "+item.getName());
					mistnostiTabPanel.setSelectedComponent(tab);
				}
				else
					log.debug("Nazvy se neshoduji: "+tab.getName()+", "+item.getName());
			}
		}
	}
}
